iT邦幫忙

2022 iThome 鐵人賽

DAY 25
1

在開發過程中,驗證參數是必須的,以前前輩有教過,欄位必填或有數值限制盡量在前端 js 就直接擋掉,不要等進到後端(WebForm年代),然而這個概念我覺得跟後來 ModelState.IsValid 很相似,我們會在進入 Controller 第一步就驗證模型是否符合我們設定的格式(必填/區間....),本篇就用 API 來作範例。

我們先建立一個 ProductsController

[Route("api/[controller]")]
[ApiController]
public class ProductsController : ControllerBase
{
    [HttpPost]
    public IActionResult Post(Product product)
    {
        if (ModelState.IsValid)
        {
           //驗證通過後可執行的方法寫此

            return Ok(product);
        }
        else
        {
            return BadRequest();
        }
    }
}

上面的 Post 方法會接收一個 Product 的 Model,以下是定義這個 Model 每個參數的驗證

  • Name 屬性必填
  • Weight 屬性必須在0~999之間

若違反以上兩個其中一個條件則會回傳 Status Code 400,並且連 ErrorMessage 一併回傳。

public class Product
{
    public int Id { get; set; }
    [Required(ErrorMessage ="請輸入名稱")]
    public string Name { get; set; }
    public decimal Price { get; set; }
    [Range(0, 999 ,ErrorMessage = "重量介於0~999之間")]
    public double Weight { get; set; }
}

測試

  1. Name 屬性未輸入
    https://ithelp.ithome.com.tw/upload/images/20221010/20152200hcRuOyoD0z.png

  2. Weight 超過 999
    https://ithelp.ithome.com.tw/upload/images/20221010/20152200RdZJ8YYaAx.png

內建屬性

除了 [Required][Range] 還有其他屬性可以使用,可參考官方文章


上一篇
[Day24]- API 系列之 JWT 實作篇
下一篇
[Day26]- API 系列之 Routing
系列文
ASP.NET Core 30 天旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言